home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 43
/
Amiga Format CD43 (1999)(Future Publishing)(GB)(Track 1 of 2)[!][issue 1999-09].iso
/
-serious-
/
wb
/
backclock
/
sources
/
partial.c
< prev
next >
Wrap
C/C++ Source or Header
|
1999-06-15
|
4KB
|
140 lines
/*****************************************************************************
*
* name : partial.c
* description : close & reopen window on workbench close
* version : 2.1ß2
*
* created : ?
* last change : 14-07-98
*
* version 2.1: bugfixed (sizing and dragging gadget)
* version 2.1ß2 : now open the window as backdrop (working)
*
*****************************************************************************
*/
#include "utils.h"
#include "partial.h"
#include "obp.h"
#include <proto/intuition.h>
#include <proto/exec.h>
BOOL partialClose(idWin * prj) {
/*
* handle notify_intuition msg
* close the window
*
*/
BOOL ret = FALSE ;
struct Message * msg ;
struct IntNotifyMessage * imsg ;
msg = GetMsg(prj->notifyPort) ;
imsg = (struct IntNotifyMessage*)msg ;
if (imsg->inm_Code == 0x200) {
/* close the window
*/
if (prj->win) {
CloseWindow(prj->win) ;
prj->win = NULL ; // in case of error
ret = TRUE ;
}
}
if (msg) ReplyMsg(msg) ;
return(ret) ;
}
void partialOpen(idWin * prj) {
/* reopen the window
*/
struct Screen * WBScreen = NULL ;
struct Message * msg ;
struct IntNotifyMessage * imsg ;
UWORD code ;
ULONG mask ;
do{
/* get msg from notifyintuition
*/
mask = Wait(1<<(prj->notifyPort->mp_SigBit)) ;
if ((msg = GetMsg(prj->notifyPort)) != NULL) {
/* received a msg
*/
imsg = (struct IntNotifyMessage *)msg ;
code = imsg->inm_Code ;
ReplyMsg(msg) ;
}
}while(code != 0x100) ;
WBScreen = LockPubScreen("Workbench") ;
prj->wb = WBScreen ;
free_bitmap(prj) ;
init_bitmap(prj) ;
prj->win = OpenWindowTags(NULL, WA_Left, prj->backWin.posX,
WA_Top, prj->backWin.posY,
WA_Width, prj->backWin.width,
WA_Height, prj->backWin.height,
WA_IDCMP, IDCMP,
WA_MinWidth, 50,
WA_MinHeight, 50,
WA_MaxHeight, 200,
WA_MaxWidth, 200,
WA_Flags, WFLG,
WA_ScreenTitle, TXT_SCRTITLE,
WA_NewLookMenus, TRUE,
WA_PubScreenName, "Workbench", TAG_DONE) ;
RemoveGList(prj->win, &szgdg, 2) ;
szgdg.Width = prj->win->Width ;
szgdg.NextGadget = &tagdg ;
tagdg.LeftEdge = prj->win->Width - 10 ;
tagdg.TopEdge = prj->win->Height - 10 ;
AddGList(prj->win, &szgdg, 0, 2, NULL) ;
RefreshGList(&szgdg, prj->win, NULL, -1) ;
UnlockPubScreen(NULL, WBScreen) ;
setColors(prj) ;
}
void setWindow(idWin * prj) {
CloseWindow(prj->win) ;
prj->wb = LockPubScreen("Workbench") ;
free_bitmap(prj) ;
init_bitmap(prj) ;
prj->win = OpenWindowTags(NULL, WA_Left, prj->backWin.posX,
WA_Top, prj->backWin.posY,
WA_Width, prj->backWin.width,
WA_Height, prj->backWin.height,
WA_IDCMP, IDCMP,
WA_MinWidth, 50,
WA_MinHeight, 50,
WA_MaxHeight, MAXH,
WA_MaxWidth, MAXH,
WA_Flags, WFLG,
WA_ScreenTitle, TXT_SCRTITLE,
WA_NewLookMenus, TRUE,
WA_PubScreenName, "Workbench", TAG_DONE) ;
RemoveGList(prj->win, &szgdg, 2) ;
szgdg.Width = prj->win->Width ;
szgdg.NextGadget = &tagdg ;
tagdg.LeftEdge = prj->win->Width /2 ;
tagdg.TopEdge = prj->win->Height - 20 ;
tagdg.Width = prj->win->Width /2 ;
AddGList(prj->win, &szgdg, 0, 2, NULL) ;
RefreshGList(&szgdg, prj->win, NULL, -1) ;
UnlockPubScreen(NULL, prj->wb) ;
// ChangeWindowBox(prj->win, prj->backWin.posX, prj->backWin.posY, prj->backWin.width, prj->backWin.height) ;
reinit_win(prj) ;
}